Postanowiłem zebrać dane dotyczące platformy Ethereum dostępne na stronie etherscan oraz przeprowadzić na nich szereg analiz.
Ethereum jest zdecentralizowaną platformą do tworzenia i uruchamiania smart contractów i aplikacji, wykorzystującą technologię blockchain. Wszystkie operacje obsługiwane są przez EVM (Ethereum Virtual Machine) oraz wiąża się z opłatą (za moc obliczneiową) dla górników nazywaną gas fee. Gas jest wyceniany w systemie rynkowym w jednostkach Gwei (\(10^-9\) ETH).
Na platformie istnieją i wciąż powstają nowe dane, które można by poddać analizie, ale postanowiłem skupić się na tych podstawowych nie wchodząc głębiej. Wszystkie dane są w postaci numerycznych szeregów czasowych o interwale dniowym, oto ich przykłady
i inne.
Pominę cały proces pobierania oddzielnych plikow .csv z danymi ze strony podanej we wstępie oraz łączenia ich w jeden dataset. Zamiast tego wczytam przygotowany przeze mnie wcześniej plik.
ethdata <- read.csv(file = 'EtherscanDataCombined.csv', check.names=FALSE)
ethdata$Date <- as.Date(as.POSIXct(ethdata$UnixTimeStamp, origin="1970-01-01"))
rownames(ethdata) <- ethdata$Date
pander(summary(ethdata))
| UnixTimeStamp | Average Txn Fee (USD) | |
|---|---|---|
| Min. : 1.0 | Min. :1.438e+09 | Min. : 0.000 |
| 1st Qu.: 685.5 | 1st Qu.:1.497e+09 | 1st Qu.: 0.080 |
| Median :1370.0 | Median :1.556e+09 | Median : 0.270 |
| Mean :1370.0 | Mean :1.556e+09 | Mean : 4.532 |
| 3rd Qu.:2054.5 | 3rd Qu.:1.616e+09 | 3rd Qu.: 2.930 |
| Max. :2739.0 | Max. :1.675e+09 | Max. :200.060 |
| Average Txn Fee (Ether) | No. of ERC20 Token Transfers | AvgBlockSize (Bytes) |
|---|---|---|
| Min. :0 | Min. : 0 | Min. : 575 |
| 1st Qu.:0 | 1st Qu.: 22762 | 1st Qu.: 7766 |
| Median :0 | Median : 400702 | Median : 22895 |
| Mean :0 | Mean : 411163 | Mean : 31972 |
| 3rd Qu.:0 | 3rd Qu.: 686906 | 3rd Qu.: 45880 |
| Max. :0 | Max. :1475639 | Max. :127467 |
| AvgBlockTime (Secs) | AvgGasLimit | AvgGasPrice (Wei) | DailyNewBlocks |
|---|---|---|---|
| Min. : 4.46 | Min. : 0 | Min. :0.000e+00 | Min. :2829 |
| 1st Qu.:13.17 | 1st Qu.: 4714969 | 1st Qu.:1.610e+10 | 1st Qu.:5865 |
| Median :13.73 | Median : 8001406 | Median :2.374e+10 | Median :6179 |
| Mean :14.40 | Mean :12128076 | Mean :4.580e+10 | Mean :6025 |
| 3rd Qu.:14.49 | 3rd Qu.:12492976 | 3rd Qu.:5.429e+10 | 3rd Qu.:6454 |
| Max. :30.31 | Max. :30076835 | Max. :9.396e+11 | Max. :7180 |
| Unique Address Total Count | Unique Address Receive Count |
|---|---|
| Min. : 0 | Min. : 0 |
| 1st Qu.: 106547 | 1st Qu.: 60456 |
| Median : 283631 | Median : 201090 |
| Mean : 282641 | Mean : 205716 |
| 3rd Qu.: 449777 | 3rd Qu.: 341964 |
| Max. :1420187 | Max. :1356170 |
| Unique Address Sent Count | ERC20 Unique Address Total Count |
|---|---|
| Min. : 0 | Min. : 0 |
| 1st Qu.: 88862 | 1st Qu.: 13372 |
| Median :174279 | Median : 205496 |
| Mean :171222 | Mean : 174140 |
| 3rd Qu.:253346 | 3rd Qu.: 262415 |
| Max. :603855 | Max. :1376408 |
| ERC20 Unique Address Receive Count | ERC20 Unique Address Sent Count | MiningRewards (ETH) |
|---|---|---|
| Min. : 0 | Min. : 0 | Min. : 0 |
| 1st Qu.: 10800 | 1st Qu.: 4784 | 1st Qu.:13493 |
| Median : 169501 | Median : 85879 | Median :13719 |
| Mean : 143672 | Mean : 82409 | Mean :18388 |
| 3rd Qu.: 215335 | 3rd Qu.:133130 | 3rd Qu.:25599 |
| Max. :1320810 | Max. :364358 | Max. :39316 |
| TotalGasUsed | EtherPrice (USD) | TotalTransactions | TotalEthSupply |
|---|---|---|---|
| Min. :0.000e+00 | Min. : 0.0 | Min. : 0 | Min. : 72049307 |
| 1st Qu.:1.140e+10 | 1st Qu.: 109.0 | 1st Qu.: 217207 | 1st Qu.: 92475557 |
| Median :4.238e+10 | Median : 267.4 | Median : 699093 | Median :105866218 |
| Mean :4.841e+10 | Mean : 809.7 | Mean : 677068 | Mean :102845833 |
| 3rd Qu.:7.992e+10 | 3rd Qu.:1231.3 | 3rd Qu.:1109189 | 3rd Qu.:115045882 |
| Max. :1.101e+11 | Max. :4811.0 | Max. :1932711 | Max. :122373635 |
| MarketCap (mln USD) | AvgNetworkDifficulty (TH) | AvgNetworkHashRate (GH/s) |
|---|---|---|
| Min. : 0 | Min. : 0 | Min. : 0 |
| 1st Qu.: 11278 | 1st Qu.: 112 | 1st Qu.: 8309 |
| Median : 27474 | Median : 2321 | Median : 178145 |
| Mean : 93516 | Mean : 3453 | Mean : 265982 |
| 3rd Qu.:148340 | 3rd Qu.: 3508 | 3rd Qu.: 283688 |
| Max. :568966 | Max. :15101 | Max. :1126674 |
| NetworkTxnFee (ETH) | NetworkUtilization (1=100%) | TotalUncleBlocks |
|---|---|---|
| Min. :0.000e+00 | Min. :0.0000 | Min. : 0.0 |
| 1st Qu.:2.378e+20 | 1st Qu.:0.4034 | 1st Qu.: 320.0 |
| Median :4.678e+20 | Median :0.6755 | Median : 381.0 |
| Mean :1.658e+21 | Mean :0.5902 | Mean : 477.1 |
| 3rd Qu.:1.170e+21 | 3rd Qu.:0.8989 | 3rd Qu.: 477.5 |
| Max. :4.276e+22 | Max. :0.9915 | Max. :2096.0 |
| Date |
|---|
| Min. :2015-07-30 |
| 1st Qu.:2017-06-13 |
| Median :2019-04-29 |
| Mean :2019-04-29 |
| 3rd Qu.:2021-03-13 |
| Max. :2023-01-27 |
W przypadku szeregów czasowych analiza takich charakterystyk jak średnia, mediana czy kwantyle nie zawsze ma sens. Po przeanalizowaniu wyników oraz zagłębieniu się w sens każdej cechy, jedyne, dla których te wskaźniki wydają się mieć sens przeanalizuje poniżej.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 4.46 | 13.17 | 13.73 | 14.4 | 14.49 | 30.31 |
Jest to średni dla danego dnia czas w sekundach potrzebny do włączenia nowego bloku do blockchain’u Ethereum.
Z wykresu i charakterystyk wynika że średni czas potrzebny na powstanie nowego bloku wynosi 14.4s, mediana jest niewiele mniejsza i wynosi 13.17s. Wszystkie wartości zdają się oscylować blisko średniej i mediany, ale jest kilka okresów, w których czas ten znacząco sie wydłuża do momentu osiągniecia lokalnej wartości maksymalnej po czym bardzo szybko wraca do średniej.
Globalna wartość maksymalna wynosi 30.31s, jest ponad dwukrotnie większa od średniej i została osiągnięta we wrześniu 2017 roku. Najniższy czas został osiągnięty pierwszego dnia działania sieci, wynosił 4.46s i był dużo mniejszy niż średnia oraz każdy kolejny odczyt.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 2829 | 5865 | 6179 | 6025 | 6454 | 7180 |
Liczba codziennych nowych bloków w sieci Ethereum stale rosła w ciągu ostatnich kilku miesięcy. Średnio w całym okresie powstawało 6025 nowych bloków dziennie. Szczytową dzienną liczbę nowych bloków w sieci Ethereum odnotowano w grudniu 2022 r., kiedy to dodano ponad 7180 nowych bloków.
Widać odwrotną korelację z poprzednia cechą (AvgBlockTime), co jest logiczne gdyż doba ma 24 godziny a jeżeli średni czas stworzenia nowego bloku rośnie to ich ilość wytworzona w ciągu jednego dnia spadnie.
Stały wzrost liczby nowych bloków jest pozytywnym sygnałem dla sieci Ethereum, gdyż świadczy o rosnącym zapotrzebowaniu na usługi sieci i wzroście wykorzystania.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 0 | 0.08 | 0.27 | 4.532 | 2.93 | 200.1 |
Średnia opłata transakcyjna w sieci Ethereum wahała się w ciągu ostatnich kilku miesięcy. Średnia opłata transakcyjna w USD z całego okresu wynosi $4.53. Jednak liczba ta znacznie różni się w zależności od zapotrzebowania na transakcje w sieci i ogólnego przeciążenia sieci.
Widać dużo wartości odstających co oznacza że w okresach dużego popytu średnia opłata transakcyjna przekracza kilkukrotnie średnią z całego okresu. Po za tymi okresami wartości oscylują wokół średniej. Największa średnia dniowa opłata na poziomie $200 miała miejsce w maju 2022, jest większa aż 44 razy od średniej wartości.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 0 | 13493 | 13719 | 18388 | 25599 | 39316 |
Cecha ta przedstawia ilość nowych ‘wykopanych’ dziennie przez górników Etherów, które stanowiły główne źródło podaży aktywa. Z wielu powodów m.in. ekologicznych wynikających z dużego żużycia energii przez sieć oraz wchłonięcia całej podaży kart graficznych na rynku, 15 września 2022 roku platforma Ethereum przeszła zmianę algorytmu konsensusu z PoW na PoS, gdzie nie ma nagród za kopanie, co widać na wykresie. Fakt ten może mieć wpływ na zaburzenie wsp. korealcji między cechami.
Najwyższa koncentracja nagród znajduje się wokół wartości mediany, a rozpiętość nagród maleje w miarę oddalania się od mediany. Wykres skrzypcowy wskazuje, że większość dziennych nagród blokowych w sieci Ethereum mieści się w pewnym zakresie, z niewielką liczbą nagród skrajnych. Wykres pokazuje, że było więcej bloków z wysokimi nagrodami niż blokami z niskimi nagrodami.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 0 | 0.4034 | 0.6755 | 0.5902 | 0.8989 | 0.9915 |
Jest to wskaźnik reprezentujący średnie zużycie gazu powyżej limitu gazu w procentach. Zapewnia kompleksowy wgląd w ogólne wykorzystanie sieci Ethereum, w tym liczbę przetworzonych transakcji, ilość zużytego gazu i liczbę wdrożonych smart-contractów.
Z wykresu skrzypcowego można zauważyć, że wykorzystanie sieci w sieci Ethereum ma tendencję do wahań, z pewnymi okresami niskiego i średniego wykorzystania oraz długim okresem wysokiego wykorzystania, który skończył się w sierpniu 2021 roku. Po tym okresie sieć jest zużywana w stopniu trochę większym od wartości średniej wynoszącej 59%.
| Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
|---|---|---|---|---|---|
| 0 | 320 | 381 | 477.1 | 477.5 | 2096 |
Cecha TotalUncleBlocks pokazuje całkowitą dzienną liczbę wygenerowanych bloków w sieci Ethereum, które są uważane za bloki Uncle. Blok Uncle to blok, który jest wydobywany i włączany do łańcucha bloków, ale nie jest włączany do głównego łańcucha. Zamiast tego staje się częścią alternatywnego łańcucha, znanego jako łańcuch Uncle. Bloki Uncle powstają, gdy dwóch(lub więcej) górników generuje blok mniej więcej w tym samym czasie, co prowadzi do jednoczesnego wydobywania i rozgłaszania wielu bloków w sieci. Sieć Ethereum zazwyczaj wybiera blok z najwyższym dowodem pracy do włączenia do głównego łańcucha, podczas gdy inne bloki stają się blokami Uncle.
Powyżej 3ciego kwantyla widać bardzo dużą rozpiętość przyjmowanych wartości co wskazuje na okresy duzej rywalizacji między górnikami o dodawanie bloków do łańcucha bloków, natomiast niska wartość mediany i niewielki rozstęp między wartościami pierwszego i trzeciego kwartyla mogą wskazywać na bardziej scentralizowany proces wydobywania z mniejszą liczbą górników. Wartość minimalna jest ‘przekłamana’ przez zmiane algorytmu konsensusu po wrześniu 2022.
Analiza trendu i sezonowości jest ważnym krokiem w analizie szeregów czasowych, ponieważ pozwala uzyskać lepsze zrozumienie wzorców w danych. Trend oznacza długoterminową tendencję w danych, podczas gdy sezonowość odnosi się do powtarzających się wzorców, które występują w określonych porach roku.
for (col in names(ethdata)[-1]) {
current_plot <- ethdata %>%
select(Date, col)
if (col != "Date") {
current_plot <- current_plot %>%
set_names(c("date", "value"))
plot <- current_plot %>%
plot_time_series(date, value, .smooth_period = 365)
print(plot)
}
}
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(col)
##
## # Now:
## data %>% select(all_of(col))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
W tym rozdziale można zbadac, czy istnieją zależności między poszczególnymi zmiennymi w danych, a także jakie są wartości autokorelacji w danych. Można wykorzystać wykresy korelacji i współczynników autokorelacji do przedstawienia wyników.
W tym rozdziale można sprawdzić, czy dane są stacjonarne i jakie są konsekwencje dla dalszej analizy.
W tym rozdziale można opisać, jakie modele szeregów czasowych zostały wykorzystane do prognozowania danych.
W tym rozdziale można przedstawić prognozy i ocenić ich jakość.
W tym ostatnim rozdziale można podsumować główne wnioski z analizy i pokazać, jakie dalsze badania można przeprowadzić.